第六天: While Loop (迴圈):依據條件無限循環
嗨,各位程式碼冒險家!歡迎來到「我的 Python 遊戲開發之旅」第六天。昨天我們學習了 For Loop (迴圈),它讓程式碼能夠針對清單或字串中的每個項目進行重複操作,大幅提升了開發效率。今天,我們要探索另一種強大的迴圈類型:While Loop (迴圈)。與 For Loop 主要用於遍歷資料不同,While Loop 的執行機制是依據我們所設定的條件,只要條件成立,指令就會不斷重複執行,直到條件不再滿足為止。
While Loop 的核心思想是「當…的時候,重複做…」。它會先判斷一個條件是否為真 (True),如果是,就執行迴圈內的程式碼;執行完畢後,再次檢查條件,如此反覆,直到條件為假 (False) 才停止。
最簡單的 While Loop 範例就是「無限迴圈」:
# 無限迴圈範例
# while True:
# print("這是一個無限迴圈!")
# # 程式會不斷輸出,直到手動中斷 (Ctrl+C)
當 while 後面的條件是 True 時,這個迴圈就會不斷重複執行,形成「無限迴圈」。這在某些情況下有用,但大多數時候我們需要設定一個中止條件來控制迴圈的執行。
控制迴圈的停止:條件與要避免無限迴圈,我們有兩種主要方法:
既然 While Loop 是基於條件,我們也可以用它來實現類似 For Loop 遍歷清單的功能。這通常需要搭配清單編號 (索引) 和 len() 函式來自動偵測清單長度。
# 使用 While Loop 遍歷清單
breakfast_menu = ["蛋餅", "三明治", "漢堡", "奶茶"]
index = 0 # 從清單的第一個項目 (編號 0) 開始
while index < len(breakfast_menu): # 條件:索引值小於清單長度 [3]
print(breakfast_menu[index])
index += 1 # 每執行一次,索引值加 1,移到下一個項目
# 輸出與 For Loop 相同:蛋餅, 三明治, 漢堡, 奶茶
這個範例說明了 While Loop 的彈性,即使是通常用 For Loop 處理的清單遍歷,也能透過條件控制和索引來實現。
現在,讓我們將今天所學的 While Loop、以及先前學過的 input、If 條件判斷式和 abs() (絕對值) 函式整合起來,設計一個簡單的「猜商品價格」遊戲。這個遊戲會讓玩家持續猜測,直到猜中或達到最大嘗試次數為止。
target_price = 1000 # 正確商品價格 [3]
max_attempts = 5 # 最大猜測次數
attempts = 0 # 已嘗試次數
last_guess_diff = float('inf') # 初始化一個非常大的差值 [4]
closest_guess = -1 # 最接近的猜測值
print("歡迎來到猜商品價格遊戲!請猜一個 1 到 2000 之間的數字。")
while attempts < max_attempts: # 只要嘗試次數還沒達到上限,就繼續 [5]
try:
guess_str = input(f"第 {attempts + 1} 次嘗試,請輸入您的猜測金額:")
guess = int(guess_str) # 將輸入的字串轉換為整數 [4]
if guess == target_price:
print("恭喜您!猜對了!商品價格就是 " + str(target_price) + " 元。")
break # 猜對了就中斷迴圈 [4]
else:
attempts += 1
diff = abs(target_price - guess) # 計算猜測與目標價格的絕對差值 [4]
if diff < last_guess_diff:
closest_guess = guess
last_guess_diff = diff
if guess < target_price:
hint = "太低了!"
else:
hint = "太高了!"
print(f"猜錯了!{hint} 您還有 {max_attempts - attempts} 次機會。")
except ValueError:
print("請輸入有效的數字!")
else: # 當 while 迴圈自然結束 (非被 break 中斷) 時執行
print("\n遊戲結束!您已用完所有嘗試次數。")
print(f"正確價格是 {target_price} 元。")
if closest_guess != -1:
print(f"您最接近的猜測是 {closest_guess} 元。")
這個遊戲示範了 While Loop 在互動式應用中的強大之處。它能夠根據玩家的輸入和設定的條件(例如猜測次數限制)來控制遊戲的流程,並透過 If 判斷和 abs() 函式提供即時反饋。
恭喜您!今天我們學習了 Python 的 While Loop,理解了它如何根據條件來控制程式碼的重複執行,以及如何運用 break 語法來控制迴圈的停止。更透過一個有趣的猜價遊戲,將所學的基礎語法融會貫通。這些都是遊戲開發中處理遊戲邏輯、實現互動功能的基石。明天,我們將介紹如何將程式碼打包成可重用的「函式」,讓您的專案結構更清晰,程式碼管理更有效率,敬請期待!